package com.gobang.common.exception;

/**
 * 用户管理模块异常类
 * 处理用户相关的业务异常
 * 
 * @author System
 * @since 1.0.0
 */
public class UserException extends BaseException {

    /**
     * 构造函数 - 使用ErrorCode枚举
     *
     * @param errorCode 错误码枚举
     */
    public UserException(ErrorCode errorCode) {
        super(errorCode);
    }

    /**
     * 构造函数 - 使用ErrorCode枚举和自定义消息
     *
     * @param errorCode 错误码枚举
     * @param customMessage 自定义错误消息
     */
    public UserException(ErrorCode errorCode, String customMessage) {
        super(errorCode, customMessage);
    }

    /**
     * 构造函数 - 包含原因异常
     *
     * @param errorCode 错误码枚举
     * @param cause 原因异常
     */
    public UserException(ErrorCode errorCode, Throwable cause) {
        super(errorCode, cause);
    }

    // 便捷方法
    public static UserException userNotFound() {
        return new UserException(ErrorCode.USER_NOT_FOUND);
    }

    public static UserException usernameAlreadyExists() {
        return new UserException(ErrorCode.USERNAME_ALREADY_EXISTS);
    }

    public static UserException userCreateFailed() {
        return new UserException(ErrorCode.USER_CREATE_FAILED);
    }

    public static UserException userUpdateFailed() {
        return new UserException(ErrorCode.USER_UPDATE_FAILED);
    }

    public static UserException usernameInvalid() {
        return new UserException(ErrorCode.USERNAME_INVALID);
    }

    public static UserException passwordInvalid() {
        return new UserException(ErrorCode.PASSWORD_INVALID);
    }

    public static UserException userStatusInvalid() {
        return new UserException(ErrorCode.USER_STATUS_INVALID);
    }

    public static UserException userScoreUpdateFailed() {
        return new UserException(ErrorCode.USER_SCORE_UPDATE_FAILED);
    }

    public static UserException userGameStatsError() {
        return new UserException(ErrorCode.USER_GAME_STATS_ERROR);
    }
} 